import request from './request'


/**
 * 查询确认商品信息
 * @param {Array} ids - 商品规格ID数组，包含需要查询确认的商品规格ID集合
 * @returns {Promise} 返回一个Promise对象，用于处理GET请求的响应结果
 * 
 * 函数功能说明：
 * 1. 接收一个商品规格ID数组，将其转换为符合HTTP GET请求格式的查询字符串
 * 2. 对每个ID进行URI编码，避免因特殊字符导致的请求错误
 * 3. 构建完整的请求URL，发起GET请求到/order/confirm接口
 * 4. 例如：当ids为[1, 2, 3]时，生成的请求URL为：
 *    /order/confirm?ids=1&ids=2&ids=3（实际ID会经过encodeURIComponent处理）
 */
export const queryConfirmProductInfo = (ids) => {
  // 将每个ID转换为"ids=编码后的值"格式，再用&拼接成完整查询字符串
  const queryString = ids.map(id => `ids=${encodeURIComponent(id)}`).join('&');
  // 发起GET请求并返回Promise对象
  return request.get(`/order/confirm?${queryString}`)
}

/**
 * 查询所有订单列表（分页）
 * @param {Number} page - 页码，必须大于等于1
 * @param {Number} pageSize - 每页条数，必须大于等于1
 * @returns {Promise} 返回一个Promise对象，解析后为分页的所有订单数据
 */
export const queryAllOrderList = (page, pageSize) => {
  return request.get(`/order/all?page=${page}&pageSize=${pageSize}`)
}

/**
 * 查询待支付订单列表（分页）
 * @param {Number} page - 页码，必须大于等于1
 * @param {Number} pageSize - 每页条数，必须大于等于1
 * @returns {Promise} 返回一个Promise对象，解析后为分页的待支付订单数据
 */
export const queryPendingPaymentOrderList = (page, pageSize) => {
  return request.get(`/order/pending/payment?page=${page}&pageSize=${pageSize}`)
}

/**
 * 查询待收货订单列表（分页）
 * @param {Number} page - 页码，必须大于等于1
 * @param {Number} pageSize - 每页条数，必须大于等于1
 * @returns {Promise} 返回一个Promise对象，解析后为分页的待收货订单数据
 */
export const queryPendingReceiptOrderList = (page, pageSize) => {
  return request.get(`/order/pending/receipt?page=${page}&pageSize=${pageSize}`)
}

/**
 * 查询已完成订单列表（分页）
 * @param {Number} page - 页码，必须大于等于1
 * @param {Number} pageSize - 每页条数，必须大于等于1
 * @returns {Promise} 返回一个Promise对象，解析后为分页的已完成订单数据
 */
export const queryFinishedOrderList = (page, pageSize) => {
  return request.get(`/order/finished?page=${page}&pageSize=${pageSize}`)
}

/**
 * 查询售后订单列表（分页）
 * @param {Number} page - 页码，必须大于等于1
 * @param {Number} pageSize - 每页条数，必须大于等于1
 * @returns {Promise} 返回一个Promise对象，解析后为分页的售后订单数据
 */
export const queryAfterSalesOrderList = (page, pageSize) => {
  return request.get(`/order/after/sales?page=${page}&pageSize=${pageSize}`)
}

/**
 * 查询待发货订单列表（分页）
 * @param {Number} page - 页码，必须大于等于1
 * @param {Number} pageSize - 每页条数，必须大于等于1
 * @returns {Promise} 返回一个Promise对象，解析后为分页的待发货订单数据
 */
export const queryPendingDeliveryOrderList = (page, pageSize) => {
  return request.get(`/order/pending/delivery?page=${page}&pageSize=${pageSize}`)
}

/**
 * 取消指定订单的接口请求函数
 * 
 * 该函数通过发送 DELETE 请求到后端接口，实现订单取消功能
 * 遵循 RESTful 设计规范，使用 DELETE 方法表示删除/作废订单资源
 * 
 * @param {string|number} orderId - 待取消订单的唯一标识符（订单ID）
 * @returns {Promise} 返回一个 Promise 对象，用于处理接口响应
 *                   成功时包含取消结果，失败时包含错误信息
 * 
 * @example
 * // 调用示例
 * cancelOrder('OD20250930123456')
 *   .then(response => {
 *     console.log('订单取消成功', response);
 *   })
 *   .catch(error => {
 *     console.error('订单取消失败', error);
 *   });
 */
export const cancelOrder = (orderId) => {
  // 发送 DELETE 请求到订单取消接口，路径中包含目标订单ID
  return request.delete(`/order/cancel/${orderId}`)
}

/**
 * 删除订单的API请求函数
 * @param {string|number} orderId - 要删除的订单ID，类型可以是字符串或数字
 * @returns {Promise} 返回一个Promise对象，用于处理异步请求的结果
 *                    成功时会包含服务器返回的删除成功信息
 *                    失败时会包含错误信息
 */
export const deleteOrder = (orderId) => {
  // 发送DELETE请求到指定的订单删除接口，传入订单ID作为URL参数
  return request.delete(`/order/delete/${orderId}`)
}

/**
 * 查询订单详情
 * 
 * 发起 HTTP GET请求获取指定订单ID的详细信息，包括订单状态、收货信息、商品列表等
 * 
 * @param {number|string} orderId - 订单唯一标识ID（必填）
 * @returns {Promise<Object>} 包含订单详情的Promise对象
 *                            成功时返回订单详情数据（结构参考OrderDetailVo）
 *                            失败时返回错误信息（通常包含code和message字段）
 * 
 * @example
 * // 调用示例
 * queryOrderDetail(10086)
 *   .then(detail => {
 *     console.log('订单详情:', detail);
 *   })
 *   .catch(error => {
 *     console.error('查询失败:', error);
 *   });
 */
export const queryOrderDetail = (orderId) => {
  return request.get(`/order/detail?orderId=${orderId}`)
}

/**
 * 更新指定订单的配送地址
 * @param {string|number} deliveryAddressId - 新配送地址的ID，用于指定要更新的目标配送地址
 * @param {string|number} orderId - 待更新配送地址的订单ID，用于唯一标识需要修改的订单
 * @returns {Promise} 返回一个Promise对象，解析后包含接口请求的响应结果（成功时返回更新确认信息，失败时返回错误详情）
 * @description 1. 功能：通过HTTP PUT请求调用后端`/order/address`接口，实现单个订单配送地址的修改；
 *              2. 请求逻辑：将订单ID（orderId）和新配送地址ID（deliveryAddressId）以查询参数形式拼接在URL中，确保后端能精准定位订单并更新地址；
 *              3. 适用场景：订单创建后、发货前需修改收货地址的业务场景（如用户在订单详情页更换配送地址）；
 *              4. 依赖说明：需确保传入的orderId对应有效订单、deliveryAddressId对应用户名下的有效配送地址，否则接口可能返回参数无效或权限错误。
 */
export const updateOrderDeliveryAddress = (deliveryAddressId, orderId) => {
  return request.put(`/order/address?deliveryAddressId=${deliveryAddressId}&orderId=${orderId}`)
}


export const queryOrderPrepareInfo = (data)=>{
  return request.post("/order/prepare/info",data)
}